﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DTO;
using System.Data.SqlClient;
namespace DAO
{
    public class HoaDonDAO
    {
        // Lấy Hóa Đơn Vừa Mới Thêm Vào
        public int LayHoaDonVuaThemVao()
        {
            // Tạo Kết Nối CSDL
            SqlConnection myCONN = DataProvider.ConnectDB();

            //Viết Câu Lệnh SQL
            string mySQL = "SELECT Top(1) Id_Hoa_Don FROM HOADON ORDER BY Id_Hoa_Don DESC";

            // Thực hiện truy vấn
            SqlCommand cmd = new SqlCommand(mySQL, myCONN);
            

            SqlDataReader reader =  cmd.ExecuteReader();
            reader.Read();
            int Id_Hoa_Don = reader.GetInt32(0);
            // Đóng kết nối CSDL
            myCONN.Close();

            return Id_Hoa_Don;

        }
        // Chèn Dữ Liệu Xuống Bảng Hóa Đơn
        public void GhiVaoBangHoaDon(HoaDonDTO hdDTO)
        {
            // Tạo Kết Nối CSDL
            SqlConnection myCONN = DataProvider.ConnectDB();

            //Viết Câu Lệnh SQL
            string mySQL="";
            mySQL = "INSERT INTO HOADON(Id_Ban_An,Gio_Vao,Gio_Ra,Ngay_Lap,Id_Tai_Khoan)  ";
            mySQL += " VALUES(@Id_Ban_An,@Gio_Vao,@Gio_Ra,@Ngay_Lay,@Tai_Khoan)";
            
            // Thực hiện truy vấn
            SqlCommand cmd = new SqlCommand(mySQL, myCONN);

            SqlParameter para;
            // Add Gio Tu
            para = cmd.Parameters.Add("@Id_Ban_An", System.Data.SqlDbType.Int);
            para.Value = hdDTO.Id_Ban_An;
            // Add Gio Den
            para = cmd.Parameters.Add("@Gio_Vao", System.Data.SqlDbType.DateTime);
            para.Value = hdDTO.Gio_Vao;
            para = cmd.Parameters.Add("@Gio_Ra", System.Data.SqlDbType.DateTime);
            para.Value = hdDTO.Gio_Ra;
            para = cmd.Parameters.Add("@Ngay_Lay", System.Data.SqlDbType.DateTime);
            para.Value = hdDTO.Ngay_Lap;
            para = cmd.Parameters.Add("@Tai_Khoan", System.Data.SqlDbType.Int);
            para.Value = 0;

            // Lấy dữ liệu từ kết quả truy vấn
            cmd.ExecuteReader();


            // Đóng kết nối CSDL
            myCONN.Close();

        }
        public void GhiVaoBangHoaDonMuaVe(HoaDonDTO hdDTO)
        {
            // Tạo Kết Nối CSDL
            SqlConnection myCONN = DataProvider.ConnectDB();

            //Viết Câu Lệnh SQL
            string mySQL = "";
            mySQL = "INSERT INTO HOADON(Id_Ban_An,Gio_Vao,Gio_Ra,Ngay_Lap,Id_Tai_Khoan)  ";
            mySQL += " VALUES(0,0,@Gio_Ra,@Ngay_Lay,0)";

            // Thực hiện truy vấn
            SqlCommand cmd = new SqlCommand(mySQL, myCONN);

            SqlParameter para;
            para = cmd.Parameters.Add("@Gio_Ra", System.Data.SqlDbType.DateTime);
            para.Value = hdDTO.Gio_Ra;
            para = cmd.Parameters.Add("@Ngay_Lay", System.Data.SqlDbType.DateTime);
            para.Value = hdDTO.Ngay_Lap;

            // Lấy dữ liệu từ kết quả truy vấn
            cmd.ExecuteReader();


            // Đóng kết nối CSDL
            myCONN.Close();

        }
        // Lấy Năm Danh Sách Năm của Ngày Lập Hóa Đơn
        public List<int> DanhSachNam()
        {
            // Tạo Kết Nối CSDL
            SqlConnection myCONN = DataProvider.ConnectDB();

            //Viết Câu Lệnh SQL
            string mySQL = "select YEAR(Ngay_Lap) from HOADON group by YEAR(Ngay_Lap) ";

            // Thực hiện truy vấn
            SqlCommand cmd = new SqlCommand(mySQL, myCONN);

            // Lấy dữ liệu từ kết quả truy vấn
            SqlDataReader reader = cmd.ExecuteReader();

            // Đổ dữ liệu vào danh sách đối tượng Khu Vực
            List<int> DanhSachNam = new List<int>();
            while (reader.Read())
            {
                int singleRecord = new int();
                singleRecord= reader.GetInt32(0);
                DanhSachNam.Add(singleRecord);
            }

            // Đóng kết nối CSDL
            myCONN.Close();

            // Trả kết quả
            return DanhSachNam;
        }
        // Lấy Danh Sách Hóa Đơn
        public List<HoaDonDTO> DanhSachHoaDon()
        {
            // Tạo Kết Nối CSDL
            SqlConnection myCONN = DataProvider.ConnectDB();

            //Viết Câu Lệnh SQL
            string mySQL = "SELECT Id_Hoa_Don FROM HOADON ";

            // Thực hiện truy vấn
            SqlCommand cmd = new SqlCommand(mySQL, myCONN);

            // Lấy dữ liệu từ kết quả truy vấn
            SqlDataReader reader = cmd.ExecuteReader();

            // Đổ dữ liệu vào danh sách đối tượng Khu Vực
            List<HoaDonDTO> listHDDTO = new List<HoaDonDTO>();
            while (reader.Read())
            {
                HoaDonDTO singleRecord = new HoaDonDTO();
                singleRecord.Id_Hoa_Don = reader.GetInt32(0);
                listHDDTO.Add(singleRecord);
            }

            // Đóng kết nối CSDL
            myCONN.Close();

            // Trả kết quả
            return listHDDTO;
        }

       
        // Doanh Thu Loại Món Ăn Theo Ngày và Giờ
        public long DoanhThuLoaiMonAnTheoGio(string gioTu,string gioDen,int Id_Loai_Mon,int KEY_CODE)
        {
            // Tạo Kết Nối CSDL
            SqlConnection myCONN = DataProvider.ConnectDB();

            //Viết Câu Lệnh SQL
            string mySQL=""; 
            mySQL += "select sum(cthd.Thanh_Tien) ";
            mySQL += "from HOADON hd,CHITIETHOADON cthd,LOAIMONAN lma,MONAN ma ";
            mySQL += "where hd.Id_Hoa_Don=cthd.Id_Hoa_Don ";
            mySQL += "and cthd.Id_Mon_An=ma.Id_Mon_An ";
            mySQL += "and ma.Id_Loai_Mon_An=lma.Id_Loai_Mon_An ";
            // Báo Cáo Theo Giờ
            if (KEY_CODE == 0)
            {
                mySQL += "and  hd.Gio_Ra BETWEEN @Gio_Tu AND @Gio_Den ";

            }
            // Báo Cáo Theo Ngày
            else if (KEY_CODE == 1)
            {
                mySQL += "and  hd.Ngay_Lap BETWEEN @Gio_Tu AND @Gio_Den ";
            }
            
            mySQL += "and lma.Id_Loai_Mon_An=@Id_Loai_Mon";

         

            // Thực hiện truy vấn
            SqlCommand cmd = new SqlCommand(mySQL, myCONN);

            SqlParameter para;
            // Add Gio Tu
            para = cmd.Parameters.Add("@Gio_Tu", System.Data.SqlDbType.DateTime);
            para.Value = gioTu;
            // Add Gio Den
            para = cmd.Parameters.Add("@Gio_Den", System.Data.SqlDbType.DateTime);
            para.Value = gioDen;
            // Add Id_Loai_Mon
            para = cmd.Parameters.Add("@Id_Loai_Mon", System.Data.SqlDbType.Int);
            para.Value = Id_Loai_Mon;

            // Lấy dữ liệu từ kết quả truy vấn
            SqlDataReader reader = cmd.ExecuteReader();

            // Lấy Dữ Liệu Doanh Thu
            long DoanhThu=0;
            while (reader.Read())
            {
                // Kiểm Tra Xem Có Bị Null Hay Không
                if (reader.IsDBNull(0))
                {
                    DoanhThu = 0;
                }
                else
                {
                    DoanhThu = reader.GetInt64(0);
                }
            }

            // Đóng kết nối CSDL
            myCONN.Close();

            // Trả kết quả
            return DoanhThu;
        }
        // Doanh Thu Khu Vực Theo Ngày và Giờ
        public long DoanhThuKhuVucTheoNgayGio(string gioTu, string gioDen, int Id_Khu_Vuc, int KEY_CODE)
        {
            // Tạo Kết Nối CSDL
            SqlConnection myCONN = DataProvider.ConnectDB();

            //Viết Câu Lệnh SQL
            string mySQL = "";
            mySQL += "select sum(tt.Thanh_Tien) ";
            mySQL += "from HOADON hd,BANAN ba,KhuVuc kv,TinhTien tt ";
            mySQL += "where hd.Id_Ban_An = ba.Id_Ban_An and kv.Id_Khu_Vuc=ba.Id_Khu_Vuc  ";
            mySQL += "and tt.Id_Hoa_Don = hd.Id_Hoa_Don  ";
            // Báo Cáo Theo Giờ
            if (KEY_CODE == 0)
            {
                mySQL += "and (hd.Gio_Ra BETWEEN '2013-05-25 13:45' AND '2013-05-25 15:00' )  ";

            }
            // Báo Cáo Theo Ngày
            else if (KEY_CODE == 1)
            {
                mySQL += "and (hd.Ngay_Lap BETWEEN @Gio_Tu AND @Gio_Den )  ";
            }

            mySQL += "and ba.Id_Khu_Vuc=@Id_Khu_Vuc";



            // Thực hiện truy vấn
            SqlCommand cmd = new SqlCommand(mySQL, myCONN);

            SqlParameter para;
            // Add Gio Tu
            para = cmd.Parameters.Add("@Gio_Tu", System.Data.SqlDbType.DateTime);
            para.Value = gioTu;
            // Add Gio Den
            para = cmd.Parameters.Add("@Gio_Den", System.Data.SqlDbType.DateTime);
            para.Value = gioDen;
            para = cmd.Parameters.Add("@Id_Khu_Vuc", System.Data.SqlDbType.Int);
            para.Value = Id_Khu_Vuc;

            // Lấy dữ liệu từ kết quả truy vấn
            SqlDataReader reader = cmd.ExecuteReader();

            // Lấy Dữ Liệu Doanh Thu
            long DoanhThu = 0;
            while (reader.Read())
            {
                // Kiểm Tra Xem Có Bị Null Hay Không
                if (reader.IsDBNull(0))
                {
                    DoanhThu = 0;
                }
                else
                {
                    DoanhThu = reader.GetInt64(0);
                }
            }

            // Đóng kết nối CSDL
            myCONN.Close();

            // Trả kết quả
            return DoanhThu;
        }
    }
}
